D3 behavior
2022-04-21
behavior,即“行为”,他主要包含了d3.behavior.drag以及d3.behavior.zoom来分别实现和处理拖拽和缩放的交互形式。
click

在先介绍 behavior前,我们需要了解到基本的鼠标事件,鼠标事件主要分为6种,主要是辨别鼠标的按下、触点等两种:
| ID | DA |
|---|---|
| click | 鼠标单击某元素时(被 mousedown(鼠标按下) and mouseup(鼠标松开)组合在一起) |
| mouseover | 当接收到光标触点时 …… |
| mouseout | 当光标从 …… 移出时 |
| mousemove | 当鼠标移动时 …… |
| mousedown | 当鼠标 按下 时 …… |
| mouseup | 当鼠标按下松开时 …… |
在下述的 code 中我们组要实现了鼠标的按下(mousedown \ click)、鼠标松开(mouseup)、光标接触(mouseover)、光标移出(mouseout)的例子,并配合过渡效果来分别的进行显示,需要值得注意的是click与 mousedown并不是完全一样的,可以从下述 code 看出差别。
1 | var padding = { |
drag

拖拽 (drag) 主要通过使用d3.behavior.drag来进行实现,是指通过鼠标将元素从一个位置到另一位置,通常主要分为按下鼠标、鼠标移动、鼠标松开等三个步骤,D3 为此提供了一种更为简单方法 :
| ID | DA | FA |
|---|---|---|
| d3.behavior.drag() | 创建一个拖拽 | |
drag.on(type[,listener]) |
设置时间监听器,主要支持三种类型,分别为:“dragstart(拖拽开始)、drag(拖拽中)、dragend(拖拽结束)“,而listener是监听函数,默认返回当前指定事件监听器 |
|
| drag.origin() | 设置拖拽起点,可以使得鼠标与被平移元素以相对不变的偏移量进行移动 ,如果设置了起点,那么将会在鼠标按下(mousedown)事件发生时进行调用 |
|
| on.dragstart | 监听 drag 拖动是否开始 |
|
| on.dragend | 监听 dran 拖动是否结束 |
在下述的 code 中,我们主要通过使用drag来进行移动,当移动的时候将数据cy\cx数据赋值到当前svg图像的x\y轴中,并通过使用dragstart与dragend来进行监听drag是否被拖动,从而添加过渡属性。
1 | /* 基本 svg 样式 */ |
zoom
缩放(zoom)是在数据可视化中较为常用的小细节之一,因此 d3 为我们提供了d3.behavior.zoom方法来用于构建缩放行为。
| ID | DA | FA |
|---|---|---|
| d3.behavior.zoom | 构建一个缩放行为 | |
| zoom(selection) | 将此行为应用到选择集中 | |
| zoom.translate() | 设置缩放的平移量,默认为0,并返回当前的平移向量 |
|
| zoom.scale() | 设置初始放大、缩小量的最大值,默认为0~∞ |
|
| zoom.center() | 设置缩放的中心点,默认为鼠标的位置 |
|
| zoom.x() | 设置一个 x方向比例尺,比例尺会随着放大、缩小改变定义域 |
|
| zoom.y() | 设置一个 y方向比例尺,比例尺会随着放大、缩小改变定义域 |
|
| zoom.on | 设置事件类型,主要分为:”zoomstart(缩放开始)、zoom(正在缩放)、zoomend(缩放结束)“三种 |

通过on.zoom来计算出缩放的开始并因此得到圆的大小和坐标信息,之后绑定数据进行绘制,在这其中主要通过使用scaleExtent来设置缩放的倍数,其方法主要分为最小值、最大值,下述code中的缩放最大为2倍,最小为1倍,并设置基础的比例尺,通过缩放来观察比例尺的缩放变化
1 | /* 基本 svg 结构 */ |
